package org.dromara.netbar.domain.vo;

import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.dromara.netbar.domain.NetbarMember;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;


/**
 * 会员信息视图对象 netbar_member
 *
 * @author Lion Li
 * @date 2025-06-30
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = NetbarMember.class)
public class NetbarMemberVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 会员ID
     */
    @ExcelProperty(value = "会员ID")
    private Long memberId;

    /**
     * 会员账号
     */
    @ExcelProperty(value = "会员账号")
    private String memberName;

    /**
     * 会员类型（normal普通会员）
     */
    @ExcelProperty(value = "会员类型", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "n=ormal普通会员")
    private String memberType;

    /**
     * 会员等级ID
     */
    @ExcelProperty(value = "会员等级ID")
    private Long memberLevelId;

    /**
     * 会员等级时间
     */
    @ExcelProperty(value = "会员等级时间")
    private Date memberLevelTime;

    /**
     * 身份证/唯一标识
     */
    @ExcelProperty(value = "身份证/唯一标识")
    private String account;

    /**
     * 身份证类型
     */
    @ExcelProperty(value = "身份证类型")
    private String idCardType;

    /**
     * 身份证号
     */
    @ExcelProperty(value = "身份证号")
    private String idCard;

    /**
     * 出生日期
     */
    @ExcelProperty(value = "出生日期")
    private String dob;

    /**
     * 民族
     */
    @ExcelProperty(value = "民族")
    private String ethnicity;

    /**
     * 住址地址
     */
    @ExcelProperty(value = "住址地址")
    private String address;

    /**
     * 发证机关
     */
    @ExcelProperty(value = "发证机关")
    private String police;

    /**
     * 身份证有效期限-开始
     */
    @ExcelProperty(value = "身份证有效期限-开始")
    private String userlifeb;

    /**
     * 身份证有效期限-结束
     */
    @ExcelProperty(value = "身份证有效期限-结束")
    private String userlifee;

    /**
     * 身份证base64
     */
    @JsonIgnore
    @ExcelProperty(value = "身份证base64")
    private String photobase64;

    /**
     * 手机号码
     */
    @ExcelProperty(value = "手机号码")
    private String phonenumber;

    /**
     * 性别（0男 1女 2未知）
     */
    @ExcelProperty(value = "性别", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "0=男,1=女,2=未知")
    private String sex;

    /**
     * 头像地址
     */
    @ExcelProperty(value = "头像地址")
    private Long avatar;

    /**
     * 密码
     */
    @ExcelProperty(value = "密码")
    private String password;

    /**
     * 基础余额
     */
    @ExcelProperty(value = "基础余额")
    private Long baseBalance;

    /**
     * 奖励余额
     */
    @ExcelProperty(value = "奖励余额")
    private Long awardBalance;

    /**
     * 状态（0正常 1停用）
     */
    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "0=正常,1=停用")
    private String status;

    /**
     * 最后登录IP
     */
    @ExcelProperty(value = "最后登录IP")
    private String lastLoginIp;

    /**
     * 最后登录时间
     */
    @ExcelProperty(value = "最后登录时间")
    private Date lastLoginTime;

    /**
     * 微信OpenID
     */
    @ExcelProperty(value = "微信OpenID")
    private String openid;

    /**
     * 备注
     */
    @ExcelProperty(value = "备注")
    private String remark;

    /**
     * 创建时间
     */
    @ExcelProperty(value = "创建时间")
    private Date createTime;

    private String tenantId;
    /**
     * 所在座位
     */
    private String clientId;

    /**
     * 在线情况
     */
    private String onlineStatus = "0";

    /**
     * 在线时长
     */
    private Long onlineTime;

    /**
     * 在线时长字符串
     */
    private String onlineTimeStr;

    /**
     * 会员类型
     */
    private String memberLevelName;

    /**
     * 所在座位
     */
    public String clientName;

    /**
     * 会自动使用的卡券信息
     */
    public List<NetbarCouponMemberVo> autoCouponMemberList;

    /**
     * 手动使用的卡券信息
     */
    public List<NetbarCouponMemberVo> manualCouponMemberList;

    public List<NetbarCouponVo> inUseCouponMemberList;
}
